package com.demo.java.OD401_450.OD431;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【模拟目录管理功能(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146320964
 */
public class OdMain {
    // 目录类，用于管理目录的名称、父目录及子目录
    static class Directory {
        private String name; // 目录名称
        private Directory parent; // 父目录
        private Map<String, Directory> subdirectories; // 存储子目录的映射

        public Directory(String name, Directory parent) {
            this.name = name;
            this.parent = parent;
            this.subdirectories = new HashMap<>();
        }

        // 添加子目录
        public void addDirectory(String directoryName) {
            if (!subdirectories.containsKey(directoryName)) {
                Directory newDirectory = new Directory(directoryName, this); // 创建新目录
                subdirectories.put(directoryName, newDirectory); // 将新目录加入到子目录映射
            }
        }

        // 切换目录
        public Directory changeDirectory(String directoryName) {
            if ("..".equals(directoryName)) {
                return (parent != null) ? parent : this; // 如果是返回上一级，返回父目录
            }
            return subdirectories.getOrDefault(directoryName, this); // 如果目录存在则返回该目录，否则停留在当前目录
        }

        // 获取当前目录的完整路径
        public String getPath() {
            StringBuilder path = new StringBuilder(name); // 从当前目录开始
            Directory current = parent;
            while (current != null) {
                path.insert(0, current.name + "/"); // 将父目录依次加到路径的前面
                current = current.parent;
            }
            return path.toString() + "/"; // 返回完整路径
        }
    }

    // 文件系统类
    static class FileSystem {
        private Directory root; // 根目录

        public FileSystem() {
            this.root = new Directory("", null); // 初始化根目录
        }

        // 执行命令
        public void executeCommand(String command) {
            if (command.startsWith("mkdir")) {
                String directoryName = command.split("\\s+")[1]; // 获取目录名称
                Directory currentDirectory = root.changeDirectory(directoryName); // 查找当前目录
                currentDirectory.addDirectory(directoryName); // 在当前目录下创建子目录
            } else if (command.startsWith("cd")) {
                String directoryName = command.split("\\s+")[1]; // 获取目标目录
                root = root.changeDirectory(directoryName); // 切换到目标目录
            } else {
                // pwd命令，输出当前路径
                System.out.println(root.getPath());
            }
        }
    }

    public static void main(String[] args) {
        FileSystem fileSystem = new FileSystem(); // 创建文件系统对象
        Scanner scanner = new Scanner(System.in); // 获取用户输入

        try {
            while (true) {
                String userInput = scanner.nextLine().trim(); // 获取命令
                if (userInput.isEmpty()) {
                    continue; // 如果命令为空则跳过
                }
                fileSystem.executeCommand(userInput); // 执行命令
            }
        } catch (Exception e) {
            // 处理异常（一般不需要处理）
        }
    }
}
